all files / timePicker/ timePickerDialog.vue

38.46% Statements 10/26
28.57% Branches 4/14
7.69% Functions 1/13
21.05% Lines 4/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117  1× 1× 1×                                                                                                                                                                                                                                  
 
import clock from './clock'
import popover from '../popover'
import dialog from '../dialog'
export default {
  props: {
    autoOk: {
      type: Boolean,
      default: false
    },
    cancelLabel: {
      type: String
    },
    okLabel: {
      type: String
    },
    container: {
      type: String,
      default: 'dialog',
      validator (val) {
        return val && ['dialog', 'inline'].indexOf(val) !== -1
      }
    },
    mode: {
      type: String,
      default: 'portrait',
      validator (val) {
        return val && ['portrait', 'landscape'].indexOf(val) !== -1
      }
    },
    format: {
      type: String,
      default: 'ampm',
      validator (val) {
        return ['ampm', '24hr'].indexOf(val) !== -1
      }
    },
    initialTime: {
      type: Date
    }
  },
  data () {
    return {
      open: false,
      showClock: false,
      trigger: null
    }
  },
  mounted () {
    this.trigger = this.$el
  },
  methods: {
    handleAccept (date) {
      this.$emit('accept', date)
      this.open = false
    },
    handleDismiss () {
      this.dismiss()
    },
    handleClose () {
      this.dismiss()
    },
    dismiss () {
      this.open = false
      this.$emit('dismiss')
    },
    hideClock () {
      this.showClock = false
    }
  },
  watch: {
    open (val) {
      if (val) this.showClock = true
    }
  },
  render (h) {
    const Clock = this.showClock ? h(clock, {
      props: {
        autoOk: this.autoOk,
        cancelLabel: this.cancelLabel,
        okLabel: this.okLabel,
        landscape: this.mode === 'landscape',
        initialTime: this.initialTime,
        format: this.format
      },
      on: {
        accept: this.handleAccept,
        dismiss: this.handleDismiss
      }
    }) : undefined
    return h('div', {
    }, [
      this.container === 'dialog' ? h(dialog, {
        props: {
          open: this.open,
          dialogClass: ['mu-time-picker-dialog', this.mode]
        },
        on: {
          close: this.handleClose,
          hide: this.hideClock
        }
      }, [Clock]) : h(popover, {
        props: {
          trigger: this.trigger,
          overlay: false,
          open: this.open
        },
        on: {
          close: this.handleClose,
          hide: this.hideClock
        }
      }, [Clock])
    ])
  }
}